GMaps.prototype.addMapType = function (mapTypeId, options) {
    if (options.hasOwnProperty("getTileUrl") && typeof (options["getTileUrl"]) == "function") {
        options.tileSize = options.tileSize || new google.maps.Size(256, 256);

        var mapType = new google.maps.ImageMapType(options);

        this.map.mapTypes.set(mapTypeId, mapType);
    } else {
        throw "'getTileUrl' function required.";
    }
};

GMaps.prototype.addOverlayMapType = function (options) {
    if (options.hasOwnProperty("getTile") && typeof (options["getTile"]) == "function") {
        var overlayMapTypeIndex = options.index;

        delete options.index;

        this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options);
    } else {
        throw "'getTile' function required.";
    }
};

GMaps.prototype.removeOverlayMapType = function (overlayMapTypeIndex) {
    this.map.overlayMapTypes.removeAt(overlayMapTypeIndex);
};
